#pragma once
#include "utils/typeinfow.h"

//interface
class IComponentInterface
{
public:
	//inline ComponentInterface() {}
	//virtual inline ~ComponentInterface()=0;

	 virtual const unsigned getInterfaceID()=0; 
	 virtual const std::string getInterfaceNAME()=0; 

};

template<typename T>
class BaseComponentInterface : public IComponentInterface
{
private:

public:
	inline static const unsigned InterfaceID()  
	{
		static unsigned hash = ::calcHashOfType<T>();
		return hash;
	}

	inline static const std::string& InterfaceNAME() 
	{
		static const std::string name( ::calcNameOfType<T>() );
		return name;
	}


	inline const unsigned getInterfaceID()
	{
		return BaseComponentInterface::InterfaceID();
	}
	inline const std::string getInterfaceNAME()
	{
		return BaseComponentInterface::InterfaceNAME();
	}
};




